/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Service;

import javax.jws.WebService;
import DB.OrdenDeDerivacion;
import java.util.List;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import DB.HibernateUtil;
import com.google.gson.Gson;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
/**
 *
 * @author Rodrigo
 */
@WebService()
public class OrdenDeDerivacionWS {
    /**
     * Web service operation agrega una orden de derivacion
     */
    @WebMethod(operationName = "agregarOrdenDeDerivacion")
    public boolean agregarOrdenDeDerivacion(@WebParam(name = "ordenDeDerivacion") OrdenDeDerivacion ordenDeDerivacion) {
        //TODO write your implementation code here:
        return ControladorDeObjetos.saveObject(ordenDeDerivacion);
    }

    /**
     * Web service operation modifica una orden de derivacion
     */
    @WebMethod(operationName = "modificarOrdenDeDerivacion")
    public boolean modificarOrdenDeDerivacion(@WebParam(name = "ordenDeDerivacion") OrdenDeDerivacion ordenDeDerivacion) {
        //TODO write your implementation code here:
        return ControladorDeObjetos.updateObject(ordenDeDerivacion);
    }

    /**
     * Web service operation lista las ordenes de derivaciones
     */
    @WebMethod(operationName = "listarDerivaciones")
    public List<OrdenDeDerivacion> listarDerivaciones() {
        //TODO write your implementation code here:
        return ControladorDeObjetos.getAllObjectByClassType(OrdenDeDerivacion.class);
    }

    /**
     * Web service operation retorna una orden de derivacion entregando como parametro su id
     */
    @WebMethod(operationName = "buscarOrdenDeDerivacion")
    public Object buscarOrdenDerivacion(@WebParam(name = "idOrden") Long idOrden) {
        //TODO write your implementation code here:
        return ControladorDeObjetos.loadObjectByLongId(idOrden, OrdenDeDerivacion.class);
    }

    /**
     * Web service operation elimina por completo una orden de derivacion
     */
    @WebMethod(operationName = "eliminarOrdenDeDerivacion")
    public void eliminarOrdenDeDerivacion(@WebParam(name = "idOrdenDeDerivacion") Long idOrdenDeDerivacion) {
        OrdenDeDerivacion coti = (OrdenDeDerivacion) ControladorDeObjetos.loadObjectByLongId(idOrdenDeDerivacion, OrdenDeDerivacion.class);
        ControladorDeObjetos.deleteObject(coti);
    }

   /**
     * Web service operation que filtra por rut de profesional,paciente, numero orden, especialdiad, diagnostico, fecha emision
     */
    @WebMethod(operationName = "buscarOrden")
    public String buscarOrden(@WebParam(name = "buscar") String buscar) {
        Session s = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction trans = s.beginTransaction();
        Criteria c = s.createCriteria(OrdenDeDerivacion.class).add(Restrictions.or(Restrictions.or( Restrictions.like("rutProfesional", "%" + buscar + "%"), Restrictions.or(Restrictions.like("rutPaciente", "%" + buscar + "%"), Restrictions.like("especialidad", "%" + buscar + "%"))),
                Restrictions.or(Restrictions.like("diagnostico", "%" + buscar + "%"),Restrictions.like("fechaEmision", "%" + buscar + "%")) ));
        List l = c.list();
        Gson gson = new Gson();
        String json = gson.toJson(l);
        s.close();
        return json;
    }
}

